package com.ww.springboot.boot.javabase.proxy.cglib;

import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import org.junit.jupiter.api.Test;

/**
 * CGLIB 动态代理 字节码增强
 */
public class CGLibTest {

    public String cgLibTest(String str) {
        System.err.println("-----------------调用反射方法传入的param为：------" + str);
        return "调用反射方法返回" + str;
    }

    /**
     * 此处用test测试，如果用main方法测试,则回报错误：
     * java.lang.NoClassDefFoundError: net/sf/cglib/proxy/MethodInterceptor
     * 这是由于此时没有项目中的jar包没有用maven管理,无法打到依赖项目的目的。
     */
    @Test
    public void test() {
//        CGLibProxy cgLibProxy = new CGLibProxy();
//        CGLibTest proyInfo = cgLibProxy.getProyInfo(CGLibTest.class);
//        String cgLibTest = proyInfo.cgLibTest("调用反射");
//        System.err.println(cgLibTest);

        //
        CGLibTest car = (CGLibTest) Enhancer.create(CGLibTest.class,(MethodInterceptor) (obj, method, args1, methodProxy) -> {
            System.out.println("before");
            Object res = methodProxy.invokeSuper(obj, args1);
            System.out.println("after");
            return res;
        });

        car.cgLibTest("sss");
    }
}